package com.example.jdk8.functionalinterface;

import java.util.Objects;
import java.util.function.Predicate;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: ZhangLiang
 * @Date: 2021/07/09/14:52
 * @Description: Lambda表达式demo
 */
public class Test {

    public static void main(String[] args) {
//        Converter<String,Integer> converter=from -> Integer.valueOf(from);
//        方式2: 静态方法引用，Java 8允许您通过::关键字传递方法或构造函数的引用
        Converter<String,Integer> converter=Integer::valueOf;
        Integer converted=converter.convert("123");
        System.out.println(converted.getClass());

        //传递方法
        Something something=new Something();
        Converter<String,String> converter1=something::startsWith;
        String s=converter1.convert("JAVA");
        System.out.println("传递方法: "+s);

        //构造函数
        PersonFactory<Person> personFactory=Person::new;
        Person person=personFactory.create("张","三");
        System.out.println(person.toString());


        //以下都是内置函数式接口
//        Predicate 接口是只有一个参数的返回布尔类型值的 断言型 接口
        Predicate<String> predicate=(ss)->ss.length()>0;
        // 该方法是接受一个传入类型,返回一个布尔值.此方法应用于判断.
        System.out.println(predicate.test("java"));   //true
        System.out.println("对判断取反: "+predicate.negate().test("java"));

        //相当于传入test方法不为空的判断
        Predicate<Boolean> predicate1= Objects::isNull;
        System.out.println("s是为空: "+ predicate1.test(s==null));
    }
}
